package lexico;

import Tipos.*;

public class Token{
    /**
     *Este atributo te indica el tipo de token que es
     */
    private TipoToken tipo;
    /**
     *Este atributo te proporciona información complementaria para identificar el
     *token. Por ejemplo el tipo de palabra reservada, un puntero a la tabla de
     *símbololos, etc.
     */
    private Object atributo;
    
    /**
     *Indica el número de columna del token
     */
    private int numColumna;
    /**
     *Indica el número de línea del token
     */
    private int numLinea;
    
    public Token(){
        
    }
    /**
     *Construye un token indicandole: el tipo de token, el atributo, la línea y 
     *su columna. En el caso de que no necesite de atributo se indica un null
     */
    public Token(TipoToken tipo,Object atributo,int linea,int columna){
        this.tipo= tipo;
        this.atributo= atributo;
        numColumna= columna;
        numLinea= linea;
    }
    
    /**
     *Constructora por copia. No comparte estructuras
     */
    public Token(Token token){
        this.tipo=new TipoToken(token.tipo.getTipo());
        this.atributo=token.atributo;
    }
    
    /**
     *Devuelve el atributo del token
     */
    public Object getAtributo(){
        return atributo;
    }
    
    /**
     *Devuelve el tipo del token
     */
    public TipoToken getTipo(){
        return tipo;
    }
    
    /**
     *Devuelve el número de columna del token
     */
    public int getColumna(){
        return numColumna;
    }
    
    /**
     *Devuelve el número de línea del token
     */
    public int getLinea(){
        return numLinea;
    }
    
    
    public static void main(String args[]){
        int a= new Integer(4);
        System.out.println(a);
    }
}